Introducción

El tema escogido para el proyecto de la asignatura es el conjunto de datos extraído desde: https://github.com/fivethirtyeight/data/tree/master/comic-characters, correspondiente a los personajes de las principales casas del comic.

El informe de este kernel se componente en:

  1. Carga y Análisis inicial de los Datos
  2. Ingeniería de Atributos.
  3. ETL: Extract, Load & Transform
  4. Análisis Exploratorio de los Datos
  5. Reglas de Asociación: ¿Hay patrones ocultos en las características de los personajes?
  6. Machine Learning: Predecir la cantidad apariciones de personaje en base a las variables del conjunto de datos.

El paso inicial consiste en cargar las librerías y dependencias que requieren las funciones a utilizar.

Luego, creamos dos funciones auxiliares para uso posterior en el conjunto de datos, una para el cálculo de moda y otra para el cálculo de la década de aparición de los personajes.

Carga y Análisis Inicial de los Datos

La información de los personajes de los COMICS, está inicialmente dividida en 2 conjuntos de datos: “DC” y “MARVEL”, los cuales serán leídos, analizados, y posteriormente unidos en uno general.

dc <- read.csv(“dc-wikia-data.csv”) marvel <- read.csv(“marvel-wikia-data.csv”)

## [1] "C:/Users/Benjamin/OneDrive/Documentos/Master MIS/DATOS-DATASCIENCE/Proyecto/Comic-dataSet"
##  [1] "allcomics-wikia-data.csv"            "clasificacion_marca.csv"            
##  [3] "Comic-dataSet.bak.Rmd"               "Comic-dataSet.bak1.Rmd"             
##  [5] "Comic-dataSet.html"                  "Comic-dataSet.Rmd"                  
##  [7] "Comic-dataSet.Rproj"                 "dc-wikia-data.csv"                  
##  [9] "Grupal.html"                         "Grupal.Rmd"                         
## [11] "marvel-wikia-data.csv"               "prediccion_cantidad_apariciones.csv"
## 'data.frame':    6896 obs. of  13 variables:
##  $ page_id         : int  1422 23387 1458 1659 1576 1448 1486 1451 71760 1380 ...
##  $ name            : Factor w/ 6896 levels "3g4 (New Earth)",..: 598 6007 2488 3002 5280 6771 378 6289 1695 2185 ...
##  $ urlslug         : Factor w/ 6896 levels "\\/wiki\\/3g4_(New_Earth)",..: 598 6006 2488 3003 5279 6771 378 6288 1695 2185 ...
##  $ ID              : Factor w/ 4 levels "","Identity Unknown",..: 4 4 4 3 4 3 3 4 3 4 ...
##  $ ALIGN           : Factor w/ 5 levels "","Bad Characters",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ EYE             : Factor w/ 18 levels "","Amber Eyes",..: 5 5 6 6 5 5 5 5 5 5 ...
##  $ HAIR            : Factor w/ 18 levels "","Black Hair",..: 2 2 5 18 2 2 3 2 3 3 ...
##  $ SEX             : Factor w/ 5 levels "","Female Characters",..: 4 4 4 4 4 2 4 4 2 4 ...
##  $ GSM             : Factor w/ 3 levels "","Bisexual Characters",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ ALIVE           : Factor w/ 3 levels "","Deceased Characters",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ APPEARANCES     : int  3093 2496 1565 1316 1237 1231 1121 1095 1075 1028 ...
##  $ FIRST.APPEARANCE: Factor w/ 775 levels "","1935, October",..: 16 456 157 462 21 34 40 487 262 130 ...
##  $ YEAR            : int  1939 1986 1959 1987 1940 1941 1941 1989 1969 1956 ...
##     page_id                                 name     
##  Min.   :  1380   3g4 (New Earth)             :   1  
##  1st Qu.: 44106   500-ZQ (New Earth)          :   1  
##  Median :141267   A'Hwiirdh-Paan'A (New Earth):   1  
##  Mean   :147441   A'monn A'mokk (New Earth)   :   1  
##  3rd Qu.:213203   A'morr (New Earth)          :   1  
##  Max.   :404010   A-Mortal (New Earth)        :   1  
##                   (Other)                     :6890  
##                                      urlslug                      ID      
##  \\/wiki\\/3g4_(New_Earth)                 :   1                   :2013  
##  \\/wiki\\/500-ZQ_(New_Earth)              :   1   Identity Unknown:   9  
##  \\/wiki\\/A-Mortal_(New_Earth)            :   1   Public Identity :2466  
##  \\/wiki\\/A%27Hwiirdh-Paan%27A_(New_Earth):   1   Secret Identity :2408  
##  \\/wiki\\/A%27monn_A%27mokk_(New_Earth)   :   1                          
##  \\/wiki\\/A%27morr_(New_Earth)            :   1                          
##  (Other)                                   :6890                          
##                 ALIGN              EYE               HAIR     
##                    : 601             :3628             :2274  
##  Bad Characters    :2895   Blue Eyes :1102   Black Hair:1574  
##  Good Characters   :2832   Brown Eyes: 879   Brown Hair:1148  
##  Neutral Characters: 565   Black Eyes: 412   Blond Hair: 744  
##  Reformed Criminals:   3   Green Eyes: 291   Red Hair  : 461  
##                            Red Eyes  : 208   White Hair: 346  
##                            (Other)   : 376   (Other)   : 349  
##                      SEX                          GSM      
##                        : 125                        :6832  
##  Female Characters     :1967   Bisexual Characters  :  10  
##  Genderless Characters :  20   Homosexual Characters:  54  
##  Male Characters       :4783                               
##  Transgender Characters:   1                               
##                                                            
##                                                            
##                  ALIVE       APPEARANCES            FIRST.APPEARANCE
##                     :   3   Min.   :   1.00   2010, December:  78   
##  Deceased Characters:1693   1st Qu.:   2.00                 :  69   
##  Living Characters  :5200   Median :   6.00   2006, June    :  48   
##                             Mean   :  23.63   1989, January :  45   
##                             3rd Qu.:  15.00   2009, October :  44   
##                             Max.   :3093.00   1988, March   :  40   
##                             NA's   :355       (Other)       :6572   
##       YEAR     
##  Min.   :1935  
##  1st Qu.:1983  
##  Median :1992  
##  Mean   :1990  
##  3rd Qu.:2003  
##  Max.   :2013  
##  NA's   :69
## 'data.frame':    16376 obs. of  13 variables:
##  $ page_id         : int  1678 7139 64786 1868 2460 2458 2166 1833 29481 1837 ...
##  $ name            : Factor w/ 16376 levels "'Spinner (Earth-616)",..: 13956 2331 16000 6775 14711 1579 12352 6556 13214 7687 ...
##  $ urlslug         : Factor w/ 16376 levels "\\/%22Spider-Girl%22_(Mutant\\/Spider_Clone)_(Earth-616)",..: 13954 2331 16000 6775 14709 1579 12351 6556 13213 7687 ...
##  $ ID              : Factor w/ 5 levels "","Known to Authorities Identity",..: 5 4 4 4 3 4 4 4 4 4 ...
##  $ ALIGN           : Factor w/ 4 levels "","Bad Characters",..: 3 3 4 3 3 3 3 3 4 3 ...
##  $ EYE             : Factor w/ 25 levels "","Amber Eyes",..: 11 5 5 5 5 5 6 6 6 5 ...
##  $ HAIR            : Factor w/ 26 levels "","Auburn Hair",..: 8 25 4 4 5 15 8 8 8 5 ...
##  $ SEX             : Factor w/ 5 levels "","Agender Characters",..: 5 5 5 5 5 5 5 5 5 5 ...
##  $ GSM             : Factor w/ 7 levels "","Bisexual Characters",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ ALIVE           : Factor w/ 3 levels "","Deceased Characters",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ APPEARANCES     : int  4043 3360 3061 2961 2258 2255 2072 2017 1955 1934 ...
##  $ FIRST.APPEARANCE: Factor w/ 833 levels "","Apr-00","Apr-01",..: 101 505 740 523 651 659 659 591 797 659 ...
##  $ Year            : int  1962 1941 1974 1963 1950 1961 1961 1962 1963 1961 ...
##     page_id                                                          name      
##  Min.   :  1025   'Spinner (Earth-616)                                 :    1  
##  1st Qu.: 28310   \\"Spider-Girl\\" (Mutant\\/Spider Clone) (Earth-616):    1  
##  Median :282578   \\"Thumper\\" Morgan (Earth-616)                     :    1  
##  Mean   :300232   \\u00c4kr\\u00e4s (Earth-616)                        :    1  
##  3rd Qu.:509077   107 (Earth-616)                                      :    1  
##  Max.   :755278   11-Ball (Earth-616)                                  :    1  
##                   (Other)                                              :16370  
##                                                    urlslug       
##  \\/%22Spider-Girl%22_(Mutant\\/Spider_Clone)_(Earth-616):    1  
##  \\/%22Thumper%22_Morgan_(Earth-616)                     :    1  
##  \\/%27Spinner_(Earth-616)                               :    1  
##  \\/%C3%84kr%C3%A4s_(Earth-616)                          :    1  
##  \\/107_(Earth-616)                                      :    1  
##  \\/11-Ball_(Earth-616)                                  :    1  
##  (Other)                                                 :16370  
##                              ID                      ALIGN     
##                               :3770                     :2812  
##  Known to Authorities Identity:  15   Bad Characters    :6720  
##  No Dual Identity             :1788   Good Characters   :4636  
##  Public Identity              :4528   Neutral Characters:2208  
##  Secret Identity              :6275                            
##                                                                
##                                                                
##          EYE               HAIR                          SEX       
##            :9767             :4264                         :  854  
##  Blue Eyes :1962   Black Hair:3755   Agender Characters    :   45  
##  Brown Eyes:1924   Brown Hair:2339   Female Characters     : 3837  
##  Green Eyes: 613   Blond Hair:1582   Genderfluid Characters:    2  
##  Black Eyes: 555   No Hair   :1176   Male Characters       :11638  
##  Red Eyes  : 508   Bald      : 838                                 
##  (Other)   :1047   (Other)   :2422                                 
##                      GSM                        ALIVE        APPEARANCES     
##                        :16286                      :    3   Min.   :   1.00  
##  Bisexual Characters   :   19   Deceased Characters: 3765   1st Qu.:   1.00  
##  Genderfluid Characters:    1   Living Characters  :12608   Median :   3.00  
##  Homosexual Characters :   66                               Mean   :  17.03  
##  Pansexual Characters  :    1                               3rd Qu.:   8.00  
##  Transgender Characters:    2                               Max.   :4043.00  
##  Transvestites         :    1                               NA's   :1096     
##  FIRST.APPEARANCE      Year     
##         :  815    Min.   :1939  
##  Jun-92 :   72    1st Qu.:1974  
##  May-93 :   69    Median :1990  
##  Sep-06 :   67    Mean   :1985  
##  Jan-94 :   66    3rd Qu.:2000  
##  Oct-93 :   58    Max.   :2013  
##  (Other):15229    NA's   :815

Ingeniería de Atributos

Se realizará una revisión de los elementos faltantes en cada conjunto de datos, así como el tratamiento básico de estos datos: normalización de clasificación, transformación de fechas.

Detección de elementos faltantes y vacios.

Se realizará un análisis previo para determinar los datos faltantes de cada dataset, luego esta información será tomada como base, para el tratamiento respectivo de los datos.

Este código ha sido oculto, pero puede mostrarse a través del botón:

## [1] 0
## [1] 0
## [1] 0
## [1] 0
## [1] 0
## [1] 0
## [1] 0
## [1] 2013
## [1] 0
## [1] 601
## [1] 0
## [1] 3628
## [1] 0
## [1] 2274
## [1] 0
## [1] 125
## [1] 0
## [1] 6832
## [1] 0
## [1] 3
## [1] 355
## [1] 0
## [1] 0
## [1] 69
## [1] 69
## [1] 0
## [1] 0
## [1] 0
## [1] 0
## [1] 0
## [1] 0
## [1] 0
## [1] 0
## [1] 3770
## [1] 0
## [1] 2812
## [1] 0
## [1] 9767
## [1] 0
## [1] 4264
## [1] 0
## [1] 854
## [1] 0
## [1] 16286
## [1] 0
## [1] 3
## [1] 1096
## [1] 0
## [1] 0
## [1] 815
## [1] 815
## [1] 0

Tratamiento de observaciones incompletas.

Se realizará un análisis previo para determinar los datos faltantes de cada conjunto de datos, luego esta información será tomada como base, para el tratamiento respectivo de los datos.

Para el ID crearemos una nueva categoría “NOT SPECIFIED”, en ambos conjuntos de datos.

Para el ALIGN crearemos una nueva categoría “NOT SPECIFIED”, en ambos conjuntos de datos

Para el EYE crearemos una nueva categoría “NOT SPECIFIED”, en ambos conjuntos de datos

Para el HAIR crearemos una nueva categoría “NOT SPECIFIED”, en ambos conjuntos de datos

Para el SEX, reemplazaremos por la moda.

## [1] "Male Characters"
## [1] "Male Characters"

Para el GENDER, se detecta la mezcla de SEX y GENDER indistintamente, por lo que se procede a depurar los GENEROS en la categoría respectiva GSM, y se asigna manualmente el sexo que corresponde, luego de una búsqueda en internet de los personajes.

Adicionalmente, ante la ausencia del género HETEROSEXUAL, se crea la categoría, y es asignada a todos aquellos personajes que no tienen géneros alternativos.

## [1] 3878
##  [1]  797  906  907  921 1123 1295 1871 2146 2255 2678 2801 3608 3729 4092 5014
## [16] 5080 5336 5844 5857 6854
dc[3878, 'SEX'] <- 'Female Characters'
dc[797, 'SEX'] <- 'Male Characters'
dc[906, 'SEX'] <- 'Male Characters'
dc[907, 'SEX'] <- 'Male Characters'
dc[921, 'SEX'] <- 'Male Characters'
dc[1123, 'SEX'] <- 'Male Characters'
dc[1295, 'SEX'] <- 'Male Characters'
dc[1871, 'SEX'] <- 'Male Characters'
dc[2146, 'SEX'] <- 'Male Characters'
dc[2255, 'SEX'] <- 'Male Characters'
dc[2678, 'SEX'] <- 'Male Characters'
dc[2801, 'SEX'] <- 'Male Characters'
dc[3608, 'SEX'] <- 'Male Characters'
dc[3729, 'SEX'] <- 'Male Characters'
dc[4092, 'SEX'] <- 'Male Characters'
dc[5014, 'SEX'] <- 'Male Characters'
dc[5080, 'SEX'] <- 'Male Characters'
dc[5336, 'SEX'] <- 'Male Characters'
dc[5844, 'SEX'] <- 'Male Characters'
dc[5857, 'SEX'] <- 'Male Characters'
dc[6854, 'SEX'] <- 'Male Characters'

dc$GSM <- as.character (dc$GSM)
dc[797, 'GSM'] <- 'Agender Characters'
dc[906, 'GSM'] <- 'Agender Characters'
dc[907, 'GSM'] <- 'Agender Characters'
dc[921, 'GSM'] <- 'Agender Characters'
dc[1123, 'GSM'] <- 'Agender Characters'
dc[1295, 'GSM'] <- 'Agender Characters'
dc[1871, 'GSM'] <- 'Agender Characters'
dc[2146, 'GSM'] <- 'Agender Characters'
dc[2255, 'GSM'] <- 'Agender Characters'
dc[2678, 'GSM'] <- 'Agender Characters'
dc[2801, 'GSM'] <- 'Agender Characters'
dc[3608, 'GSM'] <- 'Agender Characters'
dc[3729, 'GSM'] <- 'Agender Characters'
dc[4092, 'GSM'] <- 'Agender Characters'
dc[5014, 'GSM'] <- 'Agender Characters'
dc[5080, 'GSM'] <- 'Agender Characters'
dc[5336, 'GSM'] <- 'Agender Characters'
dc[5844, 'GSM'] <-'Agender Characters'
dc[5857, 'GSM'] <- 'Agender Characters'
dc[6854, 'GSM'] <- 'Agender Characters'
dc[3878, 'GSM'] <- 'Agender Characters'
dc[1295, 'GSM'] <- 'Genderfluid Characters'
dc$SEX <- factor (dc$SEX) #RECONVERSION A FACTOR
dc$GSM <- factor (dc$GSM) #RECONVERSION A FACTOR

#PARA GSM FALTANTES: AQUELLOS PERSONAJES QUE NO TIENEN DEFINIDOS GENEROS ALTERNATIVOS SON CLASIFICADOS COMO "HETEROSEXUAL"
dc$GSM <- as.character(dc$GSM) #ELIMINACION DE FACTOR PARA PODER EDITAR LOS VALORES DE LA COLUMNA
dc$GSM[dc$GSM==''] <- 'Heterosexual Characters'  
dc$GSM <- factor (dc$GSM) #RECONVERSION A FACTOR

#DETECTAMOS "AGENDER" Y "GENDERFLUID" COMO SEXO
#PROCEDEMOS CON LA DEPURACION DE TRANSGENDER Y GENDERLESS COMO SEXO, Y ASIGNACION DEL GENERO A LA VARIABLE CORRECTA "GSM".
length(which(marvel$SEX=='Agender Characters'))
## [1] 45
## [1] 2

Para el ALIVE, en DC, el estado es asignado manualmente luego de una búsqueda en internet. Mientras que en Marvel se reemplaza por ´Living Characters´ que es el factor predominante.

## [1] 2727 3251 6855
## [1] 16294 16330 16348

Para EYE, se detecta una mezcla en los datos EYE y HAIR, que es depurada manualmente.

##  [1] "Amber Eyes"         "Auburn Hair"        "Black Eyes"        
##  [4] "Blue Eyes"          "Brown Eyes"         "Gold Eyes"         
##  [7] "Green Eyes"         "Grey Eyes"          "Hazel Eyes"        
## [10] "NOT SPECIFIED"      "Orange Eyes"        "Photocellular Eyes"
## [13] "Pink Eyes"          "Purple Eyes"        "Red Eyes"          
## [16] "Violet Eyes"        "White Eyes"         "Yellow Eyes"
## [1]  873 1777 3601 3624 3628 4071 5347

Para FIRST.APPEARANCE, el año de primera aparición del personaje, procedemos a eliminar las observaciones que no cuenten con este dato. ya que gran parte del análisis exploratorio a realizar requiere este dato, para contrastar la evolución en el tiempo.

Para la variable APPEARANCES, es necesaria la creación de un modelo de regresión lineal que calcule las apariciones de los datos faltantes. esta será creada luego de la fase de ETL, en que se normalicen los datos que serán insumos para ese modelo.

Tratamiento de los Datos (ETL)

En esta sección realizaremos crearemos variables nuevas relacionadas con los datos iniciales del conjunto de datos, que brindarán una mejor perspectiva para la visualización y clasificación de los datos.

Como primer paso tenemos la creación de variables: NAME LENGTH, URL LENGTH, luego homogenizaremos la fecha, para calcular dos variables relacionadas: DECADA y TRIMESTRE de aparición.

finalmente crearemos el modelo de regresión lineal, para el cálculo de las apariciones faltantes en algunas observaciones.

El tratamiento de la fecha es distinto en cada conjunto de datos, ya que no comparten el mismo formato.

##   [1]  210  261  338  364  557  583  617  642  714  811  843  889 1114 1200 1286
##  [16] 1351 1354 1567 1673 1761 1764 1765 1770 2008 2135 2167 2280 2298 2310 2312
##  [31] 2341 2357 2358 2476 2495 2513 2543 2680 2702 2706 2715 2719 2728 2737 2757
##  [46] 2976 3032 3315 3334 3347 3558 3596 3600 3602 3634 3639 3699 3706 3715 3723
##  [61] 3739 4053 4077 4079 4082 4096 4147 4151 4174 4190 4211 4232 4476 4496 4535
##  [76] 4554 4585 4587 4652 4669 4670 4682 4686 4688 4697 5081 5086 5088 5098 5111
##  [91] 5192 5197 5239 5262 5264 5266 5267 5285 5287 5310 5317 5320 5321 5333 5337
## [106] 5346 5911 5925 5932 5968 5972 5975 5991 6035 6045 6051 6088 6096 6098 6099
## [121] 6101 6107 6108 6109 6125 6140 6146 6151 6171 6203 6215 6229 6244 6257 6261
## [136] 6313 6325 6359 6609 6622 6623 6651 6681 6689 6708 6749
## integer(0)

Se crean las variables relacionadas a la fecha de aparición del personaje.

El modelo de regresión lineal usa varias variables, relacionadas principalmente al PAGE_ID Y EL URL.LENTGH, ya que de forma empírica hemos podido observar que los personajes más antiguos que suelen tener mayor número de apariciones tienen un ID y URL menor que aquellos personajes modernos con menor número de apariciones.

## 
## Call:
## lm(formula = dc$APPEARANCES ~ dc$page_id + dc$NAME.LENGTH + +dc$URL.LENGTH + 
##     dc$ID + dc$ALIGN + dc$EYE + dc$HAIR + dc$SEX + dc$GSM + dc$ALIVE + 
##     dc$YEAR + dc$FECHA.APARICION, data = dc, na.action = na.exclude)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -119.84  -24.41   -4.64   10.97 2954.56 
## 
## Coefficients:
##                                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                   -4.411e+02  7.182e+03  -0.061  0.95103    
## dc$page_id                    -1.218e-04  1.067e-05 -11.415  < 2e-16 ***
## dc$NAME.LENGTH                 7.883e+00  4.290e+01   0.184  0.85423    
## dc$URL.LENGTH                 -8.138e+00  4.290e+01  -0.190  0.84957    
## dc$IDNOT SPECIFIED            -1.229e+01  2.770e+01  -0.444  0.65723    
## dc$IDPublic Identity          -1.585e+00  2.769e+01  -0.057  0.95435    
## dc$IDSecret Identity           3.990e+00  2.768e+01   0.144  0.88541    
## dc$ALIGNGood Characters        2.063e+01  2.403e+00   8.584  < 2e-16 ***
## dc$ALIGNNeutral Characters     6.444e+00  4.011e+00   1.607  0.10817    
## dc$ALIGNNOT SPECIFIED          1.148e+01  3.946e+00   2.910  0.00363 ** 
## dc$ALIGNReformed Criminals     2.022e+01  4.779e+01   0.423  0.67224    
## dc$EYEBlack Eyes              -3.551e+01  3.725e+01  -0.953  0.34047    
## dc$EYEBlue Eyes               -2.301e+00  3.711e+01  -0.062  0.95056    
## dc$EYEBrown Eyes              -2.486e+01  3.710e+01  -0.670  0.50287    
## dc$EYEGold Eyes               -3.099e+01  4.819e+01  -0.643  0.52020    
## dc$EYEGreen Eyes              -8.583e+00  3.737e+01  -0.230  0.81836    
## dc$EYEGrey Eyes               -2.433e+01  3.950e+01  -0.616  0.53798    
## dc$EYEHazel Eyes              -1.666e+01  4.083e+01  -0.408  0.68333    
## dc$EYENOT SPECIFIED           -3.536e+01  3.707e+01  -0.954  0.34010    
## dc$EYEOrange Eyes             -3.202e+01  4.851e+01  -0.660  0.50923    
## dc$EYEPhotocellular Eyes      -2.657e+01  3.926e+01  -0.677  0.49848    
## dc$EYEPink Eyes               -2.620e+01  5.236e+01  -0.500  0.61683    
## dc$EYEPurple Eyes              2.325e+01  4.319e+01   0.538  0.59041    
## dc$EYERed Eyes                -2.272e+01  3.754e+01  -0.605  0.54514    
## dc$EYEViolet Eyes             -4.151e+01  4.747e+01  -0.875  0.38186    
## dc$EYEWhite Eyes              -2.813e+01  3.785e+01  -0.743  0.45739    
## dc$EYEYellow Eyes             -2.216e+01  3.828e+01  -0.579  0.56270    
## dc$HAIRBlack Hair              6.249e+00  3.387e+01   0.185  0.85360    
## dc$HAIRBlond Hair             -1.041e+00  3.394e+01  -0.031  0.97554    
## dc$HAIRBlue Hair              -4.671e+00  3.650e+01  -0.128  0.89819    
## dc$HAIRBrown Hair             -5.052e-01  3.389e+01  -0.015  0.98811    
## dc$HAIRGold Hair              -2.576e+01  5.349e+01  -0.482  0.63017    
## dc$HAIRGreen Hair              1.946e+01  3.627e+01   0.536  0.59164    
## dc$HAIRGrey Hair              -7.117e+00  3.449e+01  -0.206  0.83652    
## dc$HAIRNOT SPECIFIED           1.977e+00  3.384e+01   0.058  0.95342    
## dc$HAIROrange Hair            -1.211e+01  3.840e+01  -0.315  0.75243    
## dc$HAIRPink Hair              -6.579e+00  4.271e+01  -0.154  0.87759    
## dc$HAIRPlatinum Blond Hair    -4.684e+01  6.755e+01  -0.693  0.48805    
## dc$HAIRPurple Hair            -9.148e+00  3.708e+01  -0.247  0.80512    
## dc$HAIRRed Hair               -4.140e+00  3.402e+01  -0.122  0.90314    
## dc$HAIRReddish Brown Hair     -1.078e+01  6.752e+01  -0.160  0.87319    
## dc$HAIRSilver Hair             8.707e+00  5.851e+01   0.149  0.88170    
## dc$HAIRStrawberry Blond Hair   2.814e+00  3.736e+01   0.075  0.93996    
## dc$HAIRViolet Hair            -1.111e+01  5.787e+01  -0.192  0.84773    
## dc$HAIRWhite Hair             -1.041e+00  3.412e+01  -0.030  0.97567    
## dc$SEXMale Characters          1.983e+00  2.476e+00   0.801  0.42322    
## dc$GSMBisexual Characters      2.401e+01  3.425e+01   0.701  0.48341    
## dc$GSMGenderfluid Characters  -3.488e+01  8.569e+01  -0.407  0.68402    
## dc$GSMHeterosexual Characters -1.576e+00  2.021e+01  -0.078  0.93783    
## dc$GSMHomosexual Characters    5.091e+00  2.333e+01   0.218  0.82729    
## dc$ALIVELiving Characters      6.653e+00  2.431e+00   2.737  0.00622 ** 
## dc$YEAR                        2.974e-01  3.641e+00   0.082  0.93491    
## dc$FECHA.APARICION            -3.369e-03  9.963e-03  -0.338  0.73529    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 82.58 on 6290 degrees of freedom
##   (338 observations deleted due to missingness)
## Multiple R-squared:  0.1391, Adjusted R-squared:  0.132 
## F-statistic: 19.55 on 52 and 6290 DF,  p-value: < 2.2e-16
## 
## Call:
## lm(formula = marvel$APPEARANCES ~ marvel$page_id + marvel$NAME.LENGTH + 
##     +marvel$URL.LENGTH + marvel$ID + marvel$ALIGN + marvel$EYE + 
##     marvel$HAIR + marvel$SEX + marvel$GSM + marvel$ALIVE + marvel$Year + 
##     marvel$FECHA.APARICION, data = marvel, na.action = na.exclude)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1368.2   -20.5    -5.6     9.0  3877.5 
## 
## Coefficients:
##                                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                        5.112e+03  5.131e+03   0.996 0.319195    
## marvel$page_id                    -5.015e-05  3.230e-06 -15.529  < 2e-16 ***
## marvel$NAME.LENGTH                -4.470e+02  1.788e+01 -25.000  < 2e-16 ***
## marvel$URL.LENGTH                  4.472e+02  1.787e+01  25.019  < 2e-16 ***
## marvel$IDNo Dual Identity         -2.204e+01  2.370e+01  -0.930 0.352412    
## marvel$IDNOT SPECIFIED            -3.437e+01  2.364e+01  -1.454 0.145990    
## marvel$IDPublic Identity          -2.493e+01  2.362e+01  -1.055 0.291265    
## marvel$IDSecret Identity          -3.274e+01  2.360e+01  -1.387 0.165410    
## marvel$ALIGNGood Characters        2.059e+01  1.952e+00  10.548  < 2e-16 ***
## marvel$ALIGNNeutral Characters     9.107e+00  2.433e+00   3.743 0.000182 ***
## marvel$ALIGNNOT SPECIFIED          2.063e+00  2.266e+00   0.910 0.362583    
## marvel$EYEBlack Eyeballs           2.165e+02  6.541e+01   3.310 0.000936 ***
## marvel$EYEBlack Eyes              -6.017e+01  3.739e+01  -1.609 0.107546    
## marvel$EYEBlue Eyes               -3.020e+01  3.722e+01  -0.811 0.417115    
## marvel$EYEBrown Eyes              -4.703e+01  3.722e+01  -1.264 0.206418    
## marvel$EYECompound Eyes           -7.507e+01  9.829e+01  -0.764 0.445008    
## marvel$EYEGold Eyes                1.956e+01  4.551e+01   0.430 0.667326    
## marvel$EYEGreen Eyes              -3.853e+01  3.737e+01  -1.031 0.302590    
## marvel$EYEGrey Eyes               -2.659e+01  3.840e+01  -0.692 0.488635    
## marvel$EYEHazel Eyes               4.815e+01  3.895e+01   1.236 0.216471    
## marvel$EYEMagenta Eyes            -4.667e+01  9.100e+01  -0.513 0.608053    
## marvel$EYEMultiple Eyes           -5.373e+01  5.511e+01  -0.975 0.329596    
## marvel$EYENo Eyes                 -6.824e+01  5.066e+01  -1.347 0.178032    
## marvel$EYENOT SPECIFIED           -6.996e+01  3.718e+01  -1.882 0.059898 .  
## marvel$EYEOne Eye                 -6.236e+01  4.242e+01  -1.470 0.141601    
## marvel$EYEOrange Eyes             -5.799e+01  4.162e+01  -1.393 0.163527    
## marvel$EYEPink Eyes               -6.648e+01  4.399e+01  -1.511 0.130723    
## marvel$EYEPurple Eyes             -5.348e+01  4.184e+01  -1.278 0.201173    
## marvel$EYERed Eyes                -5.502e+01  3.741e+01  -1.471 0.141406    
## marvel$EYESilver Eyes             -4.947e+01  4.704e+01  -1.052 0.293020    
## marvel$EYEVariable Eyes           -4.993e+01  4.207e+01  -1.187 0.235338    
## marvel$EYEViolet Eyes             -6.922e+01  4.707e+01  -1.471 0.141409    
## marvel$EYEWhite Eyes              -6.003e+01  3.750e+01  -1.601 0.109475    
## marvel$EYEYellow Eyeballs         -6.501e+01  5.259e+01  -1.236 0.216398    
## marvel$EYEYellow Eyes             -5.472e+01  3.766e+01  -1.453 0.146252    
## marvel$HAIRBald                   -1.910e+01  1.131e+01  -1.689 0.091268 .  
## marvel$HAIRBlack Hair             -2.420e+01  1.089e+01  -2.223 0.026250 *  
## marvel$HAIRBlond Hair             -2.119e+01  1.100e+01  -1.926 0.054071 .  
## marvel$HAIRBlue Hair               2.670e+01  1.670e+01   1.599 0.109809    
## marvel$HAIRBronze Hair            -5.503e+01  9.163e+01  -0.601 0.548180    
## marvel$HAIRBrown Hair             -2.019e+01  1.095e+01  -1.843 0.065407 .  
## marvel$HAIRDyed Hair               9.670e+00  9.163e+01   0.106 0.915952    
## marvel$HAIRGold Hair              -5.433e+01  3.642e+01  -1.492 0.135760    
## marvel$HAIRGreen Hair             -2.304e+01  1.410e+01  -1.634 0.102275    
## marvel$HAIRGrey Hair              -2.870e+01  1.153e+01  -2.490 0.012801 *  
## marvel$HAIRLight Brown Hair       -4.423e+01  4.210e+01  -1.051 0.293411    
## marvel$HAIRMagenta Hair           -3.462e+01  5.361e+01  -0.646 0.518470    
## marvel$HAIRNo Hair                -1.835e+01  1.123e+01  -1.634 0.102366    
## marvel$HAIRNOT SPECIFIED          -1.993e+01  1.094e+01  -1.822 0.068490 .  
## marvel$HAIROrange-brown Hair      -1.736e+01  6.524e+01  -0.266 0.790213    
## marvel$HAIROrange Hair            -2.431e+01  1.778e+01  -1.367 0.171578    
## marvel$HAIRPink Hair              -4.174e+01  2.067e+01  -2.019 0.043467 *  
## marvel$HAIRPurple Hair            -7.048e+00  1.881e+01  -0.375 0.707840    
## marvel$HAIRRed Hair               -1.542e+01  1.139e+01  -1.353 0.176027    
## marvel$HAIRReddish Blond Hair     -9.326e-01  3.890e+01  -0.024 0.980874    
## marvel$HAIRSilver Hair             1.409e+01  2.674e+01   0.527 0.598114    
## marvel$HAIRStrawberry Blond Hair   1.392e+01  1.729e+01   0.805 0.420786    
## marvel$HAIRVariable Hair          -3.430e+01  2.729e+01  -1.257 0.208830    
## marvel$HAIRWhite Hair             -2.150e+01  1.133e+01  -1.898 0.057746 .  
## marvel$HAIRYellow Hair            -2.652e+01  2.401e+01  -1.105 0.269377    
## marvel$SEXMale Characters          3.848e+00  1.917e+00   2.007 0.044778 *  
## marvel$GSMBisexual Characters      1.633e+02  2.689e+01   6.074 1.28e-09 ***
## marvel$GSMGenderfluid Characters   2.063e+02  6.639e+01   3.107 0.001893 ** 
## marvel$GSMHeterosexual Characters -1.364e+01  1.617e+01  -0.843 0.399088    
## marvel$GSMHomosexual Characters   -3.381e+00  2.016e+01  -0.168 0.866831    
## marvel$GSMPansexual Characters     3.191e+01  9.339e+01   0.342 0.732555    
## marvel$GSMTransgender Characters   1.627e+01  6.635e+01   0.245 0.806236    
## marvel$GSMTransvestites            4.447e+02  9.246e+01   4.810 1.52e-06 ***
## marvel$ALIVELiving Characters      9.422e+00  1.797e+00   5.243 1.60e-07 ***
## marvel$Year                       -2.978e+00  2.605e+00  -1.143 0.252967    
## marvel$FECHA.APARICION             6.589e-03  7.133e-03   0.924 0.355632    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 90.94 on 14594 degrees of freedom
##   (896 observations deleted due to missingness)
## Multiple R-squared:  0.1285, Adjusted R-squared:  0.1243 
## F-statistic: 30.75 on 70 and 14594 DF,  p-value: < 2.2e-16

Los modelos de regresión lineal creados tienen una precisión muy baja (R Cuadrado de 0.10 aprox.), por lo que más bien optaremos por reemplazar los valores de apariciones faltantes por la media. En el apartado de Machine Learning, trataremos de solventar este inconveniente creando un mejor modelo, de forma que pueda aprovechar mejor los datos y nos permita predecir las apariciones con una mayor fiabilidad.

## integer(0)
##     page_id           name             urlslug         
##  Min.   :  1025   Length:15561       Length:15561      
##  1st Qu.: 26841   Class :character   Class :character  
##  Median :273384   Mode  :character   Mode  :character  
##  Mean   :289960                                        
##  3rd Qu.:502038                                        
##  Max.   :755278                                        
##                                                        
##                              ID                      ALIGN     
##  Known to Authorities Identity:  15   Bad Characters    :6450  
##  No Dual Identity             :1598   Good Characters   :4366  
##  NOT SPECIFIED                :3602   Neutral Characters:2073  
##  Public Identity              :4370   NOT SPECIFIED     :2672  
##  Secret Identity              :5976                            
##                                                                
##                                                                
##             EYE                  HAIR                     SEX       
##  NOT SPECIFIED:9349   NOT SPECIFIED:4003   Female Characters: 3628  
##  Blue Eyes    :1857   Black Hair   :3585   Male Characters  :11933  
##  Brown Eyes   :1821   Brown Hair   :2244                            
##  Green Eyes   : 580   Blond Hair   :1498                            
##  Black Eyes   : 514   No Hair      :1118                            
##  Red Eyes     : 480   Bald         : 786                            
##  (Other)      : 960   (Other)      :2327                            
##                       GSM                        ALIVE        APPEARANCES    
##  Heterosexual Characters:15440   Deceased Characters: 3640   Min.   :   1.0  
##  Homosexual Characters  :   61   Living Characters  :11921   1st Qu.:   1.0  
##  Agender Characters     :   36                               Median :   3.0  
##  Bisexual Characters    :   18                               Mean   :  17.4  
##  Genderfluid Characters :    2                               3rd Qu.:  11.0  
##  Transgender Characters :    2                               Max.   :4043.0  
##  (Other)                :    2                                               
##       Year       NAME.LENGTH      URL.LENGTH   FECHA.APARICION     
##  Min.   :1939   Min.   : 4.00   Min.   : 6.0   Min.   :1939-10-01  
##  1st Qu.:1974   1st Qu.:20.00   1st Qu.:23.0   1st Qu.:1974-05-01  
##  Median :1990   Median :24.00   Median :26.0   Median :1990-01-01  
##  Mean   :1985   Mean   :24.35   Mean   :26.4   Mean   :1985-06-05  
##  3rd Qu.:2000   3rd Qu.:27.00   3rd Qu.:29.0   3rd Qu.:2000-10-01  
##  Max.   :2013   Max.   :69.00   Max.   :71.0   Max.   :2013-06-01  
##                                                                    
##  ANIOS.DESDE.APARICION    MES.APARICION  TRIMESTRE.APARICION DECADA.APARICION
##  Min.   : 6.00         octubre   :1422   Min.   :1.000       Min.   :1930    
##  1st Qu.:19.00         diciembre :1416   1st Qu.:2.000       1st Qu.:1970    
##  Median :30.00         agosto    :1412   Median :3.000       Median :1990    
##  Mean   :34.29         noviembre :1393   Mean   :2.565       Mean   :1981    
##  3rd Qu.:45.00         septiembre:1392   3rd Qu.:4.000       3rd Qu.:2000    
##  Max.   :80.00         junio     :1307   Max.   :4.000       Max.   :2010    
##                        (Other)   :7219                                       
##  MEDIA.APARICIONES.ANIO
##  Min.   : 0.01250      
##  1st Qu.: 0.04762      
##  Median : 0.13514      
##  Mean   : 0.53517      
##  3rd Qu.: 0.41667      
##  Max.   :70.92982      
## 
## integer(0)
##     page_id           name             urlslug                         ID      
##  Min.   :  1380   Length:6681        Length:6681        Identity Unknown:   9  
##  1st Qu.: 42999   Class :character   Class :character   NOT SPECIFIED   :1934  
##  Median :140700   Mode  :character   Mode  :character   Public Identity :2386  
##  Mean   :146977                                         Secret Identity :2352  
##  3rd Qu.:212868                                                                
##  Max.   :404010                                                                
##                                                                                
##                 ALIGN                 EYE                  HAIR     
##  Bad Characters    :2830   NOT SPECIFIED:3507   NOT SPECIFIED:2191  
##  Good Characters   :2714   Blue Eyes    :1070   Black Hair   :1510  
##  Neutral Characters: 548   Brown Eyes   : 856   Brown Hair   :1123  
##  NOT SPECIFIED     : 586   Black Eyes   : 401   Blond Hair   : 719  
##  Reformed Criminals:   3   Green Eyes   : 282   Red Hair     : 457  
##                            Red Eyes     : 204   White Hair   : 332  
##                            (Other)      : 361   (Other)      : 349  
##                 SEX                            GSM      
##  Female Characters:1911   Agender Characters     :  19  
##  Male Characters  :4770   Bisexual Characters    :   9  
##                           Genderfluid Characters :   1  
##                           Heterosexual Characters:6601  
##                           Homosexual Characters  :  51  
##                                                         
##                                                         
##                  ALIVE       APPEARANCES           YEAR       NAME.LENGTH   
##  Deceased Characters:1643   Min.   :   1.00   Min.   :1935   Min.   :10.00  
##  Living Characters  :5038   1st Qu.:   3.00   1st Qu.:1983   1st Qu.:20.00  
##                             Median :   7.00   Median :1993   Median :23.00  
##                             Mean   :  24.13   Mean   :1990   Mean   :23.15  
##                             3rd Qu.:  19.00   3rd Qu.:2003   3rd Qu.:26.00  
##                             Max.   :3093.00   Max.   :2013   Max.   :46.00  
##                                                                             
##    URL.LENGTH    FECHA.APARICION      ANIOS.DESDE.APARICION    MES.APARICION 
##  Min.   :18.00   Min.   :1935-10-01   Min.   : 6.0          agosto    : 634  
##  1st Qu.:28.00   1st Qu.:1983-09-01   1st Qu.:16.0          diciembre : 632  
##  Median :32.00   Median :1993-01-01   Median :27.0          junio     : 613  
##  Mean   :31.19   Mean   :1990-03-18   Mean   :29.5          octubre   : 604  
##  3rd Qu.:34.00   3rd Qu.:2003-07-01   3rd Qu.:36.0          septiembre: 563  
##  Max.   :54.00   Max.   :2013-10-01   Max.   :84.0          julio     : 554  
##                                                             (Other)   :3081  
##  TRIMESTRE.APARICION DECADA.APARICION MEDIA.APARICIONES.ANIO
##  Min.   :1.000       Min.   :1930     Min.   : 0.0119       
##  1st Qu.:2.000       1st Qu.:1980     1st Qu.: 0.1111       
##  Median :3.000       Median :1990     Median : 0.2973       
##  Mean   :2.525       Mean   :1985     Mean   : 0.7336       
##  3rd Qu.:4.000       3rd Qu.:2000     3rd Qu.: 0.7000       
##  Max.   :4.000       Max.   :2010     Max.   :75.6364       
## 

Análisis Exploratorio de los Datos

En esta sección realizaremos un análisis de la correlación dentro de cada conjunto de datos, para identificar las tendencias dentro de cada uno de estos.

Correlación DC

##                   page_id          ID       ALIGN         EYE         HAIR
## page_id      1.0000000000 -0.16299673 -0.05693924  0.16044400  0.002823465
## ID          -0.1629967309  1.00000000 -0.11020121 -0.13825540 -0.045226812
## ALIGN       -0.0569392359 -0.11020121  1.00000000 -0.06523654 -0.036431910
## EYE          0.1604440036 -0.13825540 -0.06523654  1.00000000  0.185095927
## HAIR         0.0028234654 -0.04522681 -0.03643191  0.18509593  1.000000000
## SEX         -0.0691144169  0.02288311 -0.12768748  0.08325072  0.048286772
## GSM         -0.0005881441  0.01374246  0.02072280 -0.02573470 -0.024145144
## ALIVE        0.0301699731 -0.03667491  0.07014972  0.02059655 -0.021861276
## APPEARANCES -0.2343211964  0.11097933  0.06578670 -0.13587387 -0.033036434
## YEAR         0.2587619960  0.00963177 -0.04879941  0.10727793 -0.014516761
##                      SEX           GSM       ALIVE  APPEARANCES         YEAR
## page_id     -0.069114417 -0.0005881441  0.03016997 -0.234321196  0.258761996
## ID           0.022883106  0.0137424562 -0.03667491  0.110979332  0.009631770
## ALIGN       -0.127687484  0.0207227969  0.07014972  0.065786697 -0.048799406
## EYE          0.083250723 -0.0257347018  0.02059655 -0.135873872  0.107277933
## HAIR         0.048286772 -0.0241451441 -0.02186128 -0.033036434 -0.014516761
## SEX          1.000000000 -0.0288566601 -0.06611165  0.008560995 -0.108399707
## GSM         -0.028856660  1.0000000000  0.01562936  0.003945860  0.004461605
## ALIVE       -0.066111647  0.0156293633  1.00000000  0.018066318  0.047398577
## APPEARANCES  0.008560995  0.0039458605  0.01806632  1.000000000 -0.246102722
## YEAR        -0.108399707  0.0044616048  0.04739858 -0.246102722  1.000000000

En el diagrama escogido para representar la correlación, los PIE CHARTS representan la “fuerza” de correlación de una variable con el resto. de lo cual se deduce:

  • PAGE_ID: guarda cierta correlación inversa con ID (tipo de identidad del personaje) y con APPEARANCES (cantidad de apariciones). Mientras que es positiva con EYE (color de ojos), y YEAR (año de primera aparición) del personaje. Esto puede deberse a como están agrupados los personajes en el sitio web de la WIKIA.

  • ID (la identidad del personaje): guarda una leve correlación inversa con ALIGN (bando: bueno, malo, etc.) y EYE, parece ser que la identidad del personaje tiene cierta inferencia en su color de ojos y el bando , al que pertenece, también tiene una baja correlación positiva con APPEARANCES.

  • EYE: con HAIR guardan una leve correlación positiva. parece haber cierta tendencia a una asociación de color de ojos y cabellos, también, EYE y SEX tienen una correlación positiva que podría indicar cierta tendencia a un color de ojos predominante para cada sexo. Esto podría ser explorado con reglas de asociación. Con APPEARANCES guarda una correlación inversa, se puede inferir que la cantidad de apariciones del personaje está relacionada con el color de los ojos.

-HAIR: tiene una correlación positiva muy baja con SEX. podría indicar una tendencia entre el color de cabello y el sexo del personaje

-SEX muestra una correlación inversa con YEAR, esto denota que a través del tiempo se han dado cambios en la cantidad de personajes de cada sexo.

  • APPEARANCES (la cantidad de apariciones del personaje) guarda una correlación inversa con el año de aparición del personaje, lo cual puede sonar lógico, mientras más tiempo tiene un personaje, es más probable que acumule más apariciones.

  • Se puede observar que la correlación es prácticamente nula en el resto de las variables, esto tendrá un impacto en los modelos de clasificación o regresión que se realicen.

Correlación Marvel

En esta sección realizaremos un análisis de la correlación dentro de cada conjunto de datos, para identificar las tendencias dentro de cada uno de estos.

##                  page_id           ID        ALIGN         EYE         HAIR
## page_id      1.000000000 -0.148256447  0.015490304  0.12248903 -0.005450832
## ID          -0.148256447  1.000000000 -0.165498086 -0.06094025 -0.041063407
## ALIGN        0.015490304 -0.165498086  1.000000000 -0.03526538  0.037643674
## EYE          0.122489027 -0.060940251 -0.035265378  1.00000000  0.233443620
## HAIR        -0.005450832 -0.041063407  0.037643674  0.23344362  1.000000000
## SEX          0.058962793 -0.001367267 -0.105289720  0.11398073  0.075561242
## GSM         -0.019653768  0.010953716  0.010225604 -0.05039580 -0.020057982
## ALIVE        0.007782404 -0.051231061  0.096910812  0.06307157  0.046200631
## APPEARANCES -0.150845593  0.011597851  0.002093302 -0.13055399 -0.025285545
## Year        -0.050244016  0.059506455  0.144493094 -0.08775530  0.028933736
##                      SEX          GSM        ALIVE  APPEARANCES         Year
## page_id      0.058962793 -0.019653768  0.007782404 -0.150845593 -0.050244016
## ID          -0.001367267  0.010953716 -0.051231061  0.011597851  0.059506455
## ALIGN       -0.105289720  0.010225604  0.096910812  0.002093302  0.144493094
## EYE          0.113980730 -0.050395804  0.063071568 -0.130553992 -0.087755302
## HAIR         0.075561242 -0.020057982  0.046200631 -0.025285545  0.028933736
## SEX          1.000000000 -0.017881703 -0.037932541 -0.018331151 -0.153905782
## GSM         -0.017881703  1.000000000 -0.008561944 -0.017543120 -0.002223035
## ALIVE       -0.037932541 -0.008561944  1.000000000  0.027696306  0.049870940
## APPEARANCES -0.018331151 -0.017543120  0.027696306  1.000000000 -0.080961048
## Year        -0.153905782 -0.002223035  0.049870940 -0.080961048  1.000000000

En el diagrama escogido para representar la correlación, los PIE CHARTS representan la “fuerza” de correlación de una variable con el resto. de lo cual se puede observar que las correlaciones son prácticamente iguales que en el DATASET de “DC”.

Unificación de los Conjuntos de Datos

Luego del análisis de correlaciones, se puede observar que ambos DATASETS se comportan de forma muy similar. por lo que se procederá a la unión de ambos, para realizar un análisis exploratorio de los datos y posterior contraste.

Es necesario que el nuevo conjunto de datos tenga un orden aleatorio, para que durante la creación de los modelos, estos no se vean influenciados o desbalanceados por un mal training. Para ello, usaremos la función de SAMPLE.

##     page_id           name             urlslug         
##  Min.   :  1025   Length:22242       Length:22242      
##  1st Qu.: 29200   Class :character   Class :character  
##  Median :186200   Mode  :character   Mode  :character  
##  Mean   :247012                                        
##  3rd Qu.:442331                                        
##  Max.   :755278                                        
##                                                        
##                              ID                      ALIGN     
##  Identity Unknown             :   9   Bad Characters    :9280  
##  NOT SPECIFIED                :5536   Good Characters   :7080  
##  Public Identity              :6756   Neutral Characters:2621  
##  Secret Identity              :8328   NOT SPECIFIED     :3258  
##  Known to Authorities Identity:  15   Reformed Criminals:   3  
##  No Dual Identity             :1598                            
##                                                                
##             EYE                   HAIR                     SEX       
##  NOT SPECIFIED:12856   NOT SPECIFIED:6194   Female Characters: 5539  
##  Blue Eyes    : 2927   Black Hair   :5095   Male Characters  :16703  
##  Brown Eyes   : 2677   Brown Hair   :3367                            
##  Black Eyes   :  915   Blond Hair   :2217                            
##  Green Eyes   :  862   No Hair      :1118                            
##  Red Eyes     :  684   Red Hair     :1056                            
##  (Other)      : 1321   (Other)      :3195                            
##                       GSM                        ALIVE        APPEARANCES     
##  Heterosexual Characters:22041   Deceased Characters: 5283   Min.   :   1.00  
##  Homosexual Characters  :  112   Living Characters  :16959   1st Qu.:   2.00  
##  Agender Characters     :   55                               Median :   4.00  
##  Bisexual Characters    :   27                               Mean   :  19.42  
##  Genderfluid Characters :    3                               3rd Qu.:  14.00  
##  Transgender Characters :    2                               Max.   :4043.00  
##  (Other)                :    2                                                
##       YEAR       NAME.LENGTH      URL.LENGTH    FECHA.APARICION     
##  Min.   :1935   Min.   : 4.00   Min.   : 6.00   Min.   :1935-10-01  
##  1st Qu.:1976   1st Qu.:20.00   1st Qu.:24.00   1st Qu.:1976-06-01  
##  Median :1990   Median :24.00   Median :27.00   Median :1990-11-01  
##  Mean   :1986   Mean   :23.99   Mean   :27.84   Mean   :1986-11-12  
##  3rd Qu.:2001   3rd Qu.:27.00   3rd Qu.:31.00   3rd Qu.:2001-08-01  
##  Max.   :2013   Max.   :69.00   Max.   :71.00   Max.   :2013-10-01  
##                                                                     
##  ANIOS.DESDE.APARICION    MES.APARICION   TRIMESTRE.APARICION DECADA.APARICION
##  Min.   : 6.00         diciembre : 2048   Min.   :1.000       Min.   :1930    
##  1st Qu.:18.00         agosto    : 2046   1st Qu.:2.000       1st Qu.:1970    
##  Median :29.00         octubre   : 2026   Median :3.000       Median :1990    
##  Mean   :32.85         septiembre: 1955   Mean   :2.553       Mean   :1982    
##  3rd Qu.:43.00         junio     : 1920   3rd Qu.:4.000       3rd Qu.:2000    
##  Max.   :84.00         noviembre : 1845   Max.   :4.000       Max.   :2010    
##                        (Other)   :10402                                       
##  MEDIA.APARICIONES.ANIO    BRAND          
##  Min.   : 0.0119        Length:22242      
##  1st Qu.: 0.0625        Class :character  
##  Median : 0.1739        Mode  :character  
##  Mean   : 0.5948                          
##  3rd Qu.: 0.5000                          
##  Max.   :75.6364                          
## 

Homogenización de Datos

Es necesario homogenizar la información, ya que ciertas variables contienen sinónimos que es necesario reducir para mejorar el análisis de los datos.

## [1] "DC"     "MARVEL"
## [1] "Identity Unknown"              "NOT SPECIFIED"                
## [3] "Public Identity"               "Secret Identity"              
## [5] "Known to Authorities Identity" "No Dual Identity"
## [1] "Bad Characters"     "Good Characters"    "Neutral Characters"
## [4] "NOT SPECIFIED"      "Reformed Criminals"
##  [1] "Amber Eyes"         "Black Eyes"         "Blue Eyes"         
##  [4] "Brown Eyes"         "Gold Eyes"          "Green Eyes"        
##  [7] "Grey Eyes"          "Hazel Eyes"         "NOT SPECIFIED"     
## [10] "Orange Eyes"        "Photocellular Eyes" "Pink Eyes"         
## [13] "Purple Eyes"        "Red Eyes"           "Violet Eyes"       
## [16] "White Eyes"         "Yellow Eyes"        "Black Eyeballs"    
## [19] "Compound Eyes"      "Magenta Eyes"       "Multiple Eyes"     
## [22] "No Eyes"            "One Eye"            "Silver Eyes"       
## [25] "Variable Eyes"      "Yellow Eyeballs"
##  [1] "Auburn Hair"           "Black Hair"            "Blond Hair"           
##  [4] "Blue Hair"             "Brown Hair"            "Gold Hair"            
##  [7] "Green Hair"            "Grey Hair"             "NOT SPECIFIED"        
## [10] "Orange Hair"           "Pink Hair"             "Platinum Blond Hair"  
## [13] "Purple Hair"           "Red Hair"              "Reddish Brown Hair"   
## [16] "Silver Hair"           "Strawberry Blond Hair" "Violet Hair"          
## [19] "White Hair"            "Bald"                  "Bronze Hair"          
## [22] "Dyed Hair"             "Light Brown Hair"      "Magenta Hair"         
## [25] "No Hair"               "Orange-brown Hair"     "Reddish Blond Hair"   
## [28] "Variable Hair"         "Yellow Hair"
## [1] "Agender Characters"      "Bisexual Characters"    
## [3] "Genderfluid Characters"  "Heterosexual Characters"
## [5] "Homosexual Characters"   "Pansexual Characters"   
## [7] "Transgender Characters"  "Transvestites"
## integer(0)

Correlación de Datos de Comics Unificados

Estableceremos la correlación para el conjunto de datos que contiene los COMICS de ambas casas comerciales.

Como conclusión, la matriz de correlación de todos los comics, tiene el siguiente comportamiento:

Graficando los Datos

El conjunto de datos tiene varias dimensiones sobre las cuales podemos mostrar los datos, así que, los hemos divido según la relevancia que pueden tener para algún fan de los cómics. Previo a ello, crearemos unos subconjuntos de datos que nos permitan establecer rankings y agrupaciones, de forma que podamos mostrar los datos de forma resumida, así como, unos gráficos iniciales que nos permitan comprender como está formado el DATASET: ALL COMICS.

Gráficos Base

Estos gráficos sirven para entender como están distribuidos los datos en el conjunto de datos de todos los comics. El primer gráfico muestra, la relación entre MARVEL y DC Comics, como se aprecia, es casi de 3 a 1.

La composición de personajes se divide prácticamente en un 75% masculino y un 25% femenino. y la distribución en cada una de las marcas parece guardar proporciones similares (3 a 1).

La composición de personajes del tipo BAD CHARACTERS (Villano), es predominante sobre GOOD CHARACTERS (Héroes), sin embargo, hay un número significativo de personajes del tipo NEUTRAL, y muchos NOT SPECIFIED. Los personajes que se han convertido al bando de héroes (REFORMED CRIMINALS), es minúsculo, considerando el tamaño del DATASET.

La composición de géneros de los cómics es predominantemente HETEROSEXUAL, por lo que es necesario filtrar esta categoría para poder analizar los géneros alternativos de los personajes.

La composición de GÉNEROS ALTERNATIVOS de personajes es principalmente HOMOSEXUAL, AGENDER, Y BISEXUAL

En este gráfico se puede observar el impacto de la II Guerra Mundial, en la industria del comic: entre 1940 y 1950 se dio una importante reducción en la aparición de nuevos personajes. Varias años después, luego de la guerra, cada una de las marcas de cómics, tienen una explosión demográfica acentuada a partir de la década de los 60´s.

Podemos observar que ambas marcas dan casi la misma importancia a la aparición de personajes de géneros alternativos (Guardando la relación sobre la cantidad de personajes que cada una tiene). Si acaso cabe resaltar, los géneros que utiliza MARVEL Cómics suelen ser más diversos: Pansexual, Transexuales, etc., mientras que DC se encasilla en los tradicionales: Homosexual y Bisexual.

Este gráfico nos permite observar cómo cada marca ha empezado a lanzar sus personajes según cada género, de lo cual: - DC, a pesar de tener un corte más conservador, es pionera en la incursión personajes del tipo BISEXUAL, aunque su frecuencia no empieza sino hasta los años 80´s - MARVEL, casi desde el inicio ha incluido personajes del tipo HOMOSEXUAL, dentro de sus cómics. No es sino hasta los años 70’s, que empiezan a incluirse más personajes de este género.

Aquí podemos observar cómo se distribuyen los géneros alternativos acorde al sexo. En las categorías HOMOSEXUAL, GENDERFLUID, TRANSVESTITES y AGENDER predomina el masculino, mientras que, en BISEXUAL, PANSEXUAL, TRANSGENDER predomina el femenino.

Gráficos relacionados a las apariciones

Este apartado contiene gráficos relacionados a la cantidad de apariciones de los personajes de cada marca de cómic.

En el primer gráfico, observamos el TOP 10 de personajes con mayores apariciones en toda la historia. Podemos observar la clara predominancia de MARVEL (8) contra DC (2).

Luego podemos ver la distribución de estos personajes por SEXO y BANDO, observando que todos son MALE y la mayoría héroes (GOOD CHARACTERS)

Este gráfico nos permite apreciar el TOP 10 de los personajes que tienen mayo recurrencia anual, aquí podemos observar que los principales personajes de ambas casas MARVEL (6), y DC (4), hacen casi el mismo número de apariciones anuales en promedio.

El siguiente gráfico permite observar el promedio de apariciones de un personaje según el SEXO, se aprecia que el promedio para personajes FEMALE es menor en DC, pero superior en MARVEL.

Este gráfico en cambio nos permite ver el promedio de apariciones de un personaje según su GÉNERO, llama la atención que el género TRANSVESTITES tenga el mayor promedio, y esto se debe a que es un único personaje de este tipo, con un alto número de apariciones (500+).

Para entender mejor el gráfico anterior, se presenta una alternativa que nos permite observar este fenómeno de la aparición de personajes a través del tiempo. En este gráfico. se observa CADA GENERO, con la SUMA DE APARICIONES en cada DECADA, se puede observar - Las apariciones de personajes del tipo HOMOSEXUAL se mantienen desde 1940, sin tener incrementos significativos. - Las apariciones de tipo BISEXUAL incrementaron en los 60´s y se encuentran en declive - Las apariciones de AGENDER se mantienen. - Los de género HETEROSEXUAL DE 1960, son los personajes con mayores números de apariciones de la historia.

Podemos analizar mejor los géneros si excluimos al Heterosexual. ya que su presencia en el gráfico distorsiona las dimensiones de los géneros alternativos. En este gráfico, podemos observar que si bien es cierto ambas marcas son inclusivas, MARVEL suele dar mayor cantidad de apariciones a sus personajes de género alternativo, e incluso con mayor diversidad.

Gráficos relacionados al paso del tiempo

El primer gráfico representa los 10 personajes más antiguos del conjunto de datos, se puede observar que todos pertenecen a la marca DC comics.

En un gráfico de la distribución por SEXO de estos personajes, vemos que la gran mayoría son MALE CHARACTERS (hombres).

Este gráfico, nos permite observar que la cantidad de apariciones de personajes según el SEXO y la marca a través del tiempo.

En ambas marcas, hay tendencias similares a la aparición de personajes para ambos sexos.

Gráficos de características de los personajes

En este gráfico, podemos observar que:

  • La proporción entre héroes y villanos en DC, es muy similar a través del tiempo, pero en MARVEL, hay más apariciones de persones del tipo villano, especialmente en la década de los 90´s.

En este gráfico, expande un poco lo observado en el anterior, agregando la dimensión del sexo. Podemos ver que tanto en DC como en MARVEL, los villanos suelen ser MALE CHARACTERS (hombres), y confirmamos que en MARVEL la cantidad de villanos excede con creces a los héroes.

Este gráfico, nos permite ver las combinaciones de características físicas (HAIR y EYE) predominantes. Las combinaciones más frecuentes son:

  • Ojos Negros y cabello negro.
  • Ojos Azules y cabello rubio, café o negro.
  • Ojos cafés y cabello negro o café.

Reglas de Asociación: ¿Hay patrones ocultos en las características de los personajes?

Para responder a esta pregunta, se utilizará el algoritmo A PRIORI, buscando patrones de las siguientes características:

Para depurar los antecedentes no deseados: (categorías vacias: NOT SPECIFIED) y consecuentes obvios (categorías con más del 70% de frecuencia: Marvel, Male, Heterosexual), utilizaremos un ciclo FOR, para cargar la lista de elementos sobre la cual buscaremos las reglas existentes.

#Nos creamos todas las combinaciones de atributos para seleccionar solo los que nos interesen más
factores<-c(sapply(allcomics_aso, levels))
i=0
l<-c()
for(factor in factores)
{
  i=i+1
  atrib=names(factores)[i]
  for(elemento in factor)
  {
    if(elemento!="MARVEL" && elemento!="NOT SPECIFIED" && elemento!="Heterosexual Characters" && elemento!="Male Characters"){
      l<-c(l,paste(atrib,"=",elemento,sep = ""))
    }
    
  }
}
#detach("package:arulesViz", unload=TRUE)
#detach("package:arules", unload=TRUE)
#search() 
#unloadNamespace("arules") 
#update.packages("arules") 

Ejecutamos el algoritmo A PRIORI.

reglas <- apriori(allcomics_aso, parameter = list(minlen=1, supp=soporte, conf=confianza), appearance = list(both=l), control = list(verbose=F))
reglas<-subset(reglas, subset = lift > umbral_lift)
reglas.ord <- sort(reglas, by="support")
inspect(reglas.ord)
##     lhs                        rhs                          support confidence     lift count
## [1] {DECADA.APARICION=1990} => {ALIVE=Living Characters} 0.19517130  0.8067274 1.058036  4341
## [2] {ID=Public Identity,                                                                     
##      ALIGN=Good Characters} => {ALIVE=Living Characters} 0.10322813  0.8153409 1.069333  2296
## [3] {ALIGN=Good Characters,                                                                  
##      SEX=Female Characters} => {ALIVE=Living Characters} 0.08735725  0.8229564 1.079320  1943

Revisamos la existencia de reglas redundantes (aquellas que son subconjunto de otra).

subset.matrix <- is.subset(reglas.ord, reglas.ord)
subset.matrix
## 3 x 3 sparse Matrix of class "ngCMatrix"
##                                                                       {ALIVE=Living Characters,DECADA.APARICION=1990}
## {ALIVE=Living Characters,DECADA.APARICION=1990}                                                                     |
## {ID=Public Identity,ALIGN=Good Characters,ALIVE=Living Characters}                                                  .
## {ALIGN=Good Characters,SEX=Female Characters,ALIVE=Living Characters}                                               .
##                                                                       {ID=Public Identity,ALIGN=Good Characters,ALIVE=Living Characters}
## {ALIVE=Living Characters,DECADA.APARICION=1990}                                                                                        .
## {ID=Public Identity,ALIGN=Good Characters,ALIVE=Living Characters}                                                                     |
## {ALIGN=Good Characters,SEX=Female Characters,ALIVE=Living Characters}                                                                  .
##                                                                       {ALIGN=Good Characters,SEX=Female Characters,ALIVE=Living Characters}
## {ALIVE=Living Characters,DECADA.APARICION=1990}                                                                                           .
## {ID=Public Identity,ALIGN=Good Characters,ALIVE=Living Characters}                                                                        .
## {ALIGN=Good Characters,SEX=Female Characters,ALIVE=Living Characters}                                                                     |
subset.matrix <- subset.matrix*1
subset.matrix
## 3 x 3 sparse Matrix of class "dgCMatrix"
##                                                                       {ALIVE=Living Characters,DECADA.APARICION=1990}
## {ALIVE=Living Characters,DECADA.APARICION=1990}                                                                     1
## {ID=Public Identity,ALIGN=Good Characters,ALIVE=Living Characters}                                                  .
## {ALIGN=Good Characters,SEX=Female Characters,ALIVE=Living Characters}                                               .
##                                                                       {ID=Public Identity,ALIGN=Good Characters,ALIVE=Living Characters}
## {ALIVE=Living Characters,DECADA.APARICION=1990}                                                                                        .
## {ID=Public Identity,ALIGN=Good Characters,ALIVE=Living Characters}                                                                     1
## {ALIGN=Good Characters,SEX=Female Characters,ALIVE=Living Characters}                                                                  .
##                                                                       {ALIGN=Good Characters,SEX=Female Characters,ALIVE=Living Characters}
## {ALIVE=Living Characters,DECADA.APARICION=1990}                                                                                           .
## {ID=Public Identity,ALIGN=Good Characters,ALIVE=Living Characters}                                                                        .
## {ALIGN=Good Characters,SEX=Female Characters,ALIVE=Living Characters}                                                                     1

Podemos observar que dentro de las reglas detectadas no hay reglas redundantes (ninguna tiene el valor TRUE, en la matriz de búsqueda de redundancia, al menos de las reglas encontradas con los valores de confianza y soporte previamente definidos).

diag(subset.matrix) <- 0
redundantes <- colSums(subset.matrix, na.rm=T) >= 1
redundantes
##                       {ALIVE=Living Characters,DECADA.APARICION=1990} 
##                                                                 FALSE 
##    {ID=Public Identity,ALIGN=Good Characters,ALIVE=Living Characters} 
##                                                                 FALSE 
## {ALIGN=Good Characters,SEX=Female Characters,ALIVE=Living Characters} 
##                                                                 FALSE

Podemos observar que dentro de las reglas detectadas no hay reglas redundantes (con los valores de confianza y soporte previamente definidos.)

#reglas.dep <-reglas.ord[redundantes]
reglas.dep <-reglas.ord
inspect(reglas.dep)
##     lhs                        rhs                          support confidence     lift count
## [1] {DECADA.APARICION=1990} => {ALIVE=Living Characters} 0.19517130  0.8067274 1.058036  4341
## [2] {ID=Public Identity,                                                                     
##      ALIGN=Good Characters} => {ALIVE=Living Characters} 0.10322813  0.8153409 1.069333  2296
## [3] {ALIGN=Good Characters,                                                                  
##      SEX=Female Characters} => {ALIVE=Living Characters} 0.08735725  0.8229564 1.079320  1943

Gráficamente podemos observar las reglas y consecuentes expuestos anteriormente.

par(mfrow=c(4,1))
plot(reglas.dep,method="graph")
plot(reglas.dep[1,],method="paracoord")
plot(reglas.dep[2,],method="paracoord")
plot(reglas.dep[3,],method="paracoord")

Machine Learning: ¿Es posible predicción de cantidad de apariciones de un personaje con precisión?

A través de un modelo de regresión, del tipo RANDOM FOREST, procederemos a predecir la cantidad de apariciones de un personaje, basándonos en varias variables del conjunto de datos, tales como la fecha de aparición del personaje, las características físicas, la longitud del nombre, y la marca.

El primer paso es graficar las dimensiones de la variable a predecir APPEARANCES, para tener una mejor idea de su comportamiento.


Se puede observar que hay cierta correlación negativa, que indica que mientras más antiguo es el personaje, es más probable que tenga un mayor número de apariciones.

Una vez que tenemos una idea del comportamiento de la variable APPEARANCES, convertimos el formato del resto de variables a numérico, para que pueda ser utilizado por el algoritmo RF.

## integer(0)
## 'data.frame':    22242 obs. of  21 variables:
##  $ page_id               : int  625370 18334 507238 148422 730519 5686 198565 274473 27061 128545 ...
##  $ name                  : chr  "Jonath (Earth-616)" "Crazy Legs (Earth-616)" "Vyr'tal (Earth-616)" "Cinderblock (New Earth)" ...
##  $ urlslug               : chr  "\\/Jonath_(Earth-616)" "\\/Crazy_Legs_(Earth-616)" "\\/Vyr%27tal_(Earth-616)" "\\/wiki\\/Cinderblock_(New_Earth)" ...
##  $ ID                    : Factor w/ 6 levels "Identity Unknown",..: 3 4 3 4 3 4 3 3 4 3 ...
##  $ ALIGN                 : Factor w/ 5 levels "Bad Characters",..: 3 4 2 1 4 2 1 1 1 1 ...
##  $ EYE                   : Factor w/ 26 levels "Amber Eyes","Black Eyes",..: 9 9 16 17 9 4 3 9 3 2 ...
##  $ HAIR                  : Factor w/ 29 levels "Auburn Hair",..: 9 5 9 9 3 2 14 9 5 5 ...
##  $ SEX                   : Factor w/ 2 levels "Female Characters",..: 2 2 2 2 2 1 2 2 2 2 ...
##  $ GSM                   : Factor w/ 8 levels "Agender Characters",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ ALIVE                 : Factor w/ 2 levels "Deceased Characters",..: 2 2 2 2 2 2 2 1 2 2 ...
##  $ APPEARANCES           : num  18 4 18 1 1 42 26 25 1 14 ...
##  $ YEAR                  : int  1996 1987 2007 2009 1973 1998 1987 1991 1998 1997 ...
##  $ NAME.LENGTH           : int  18 22 19 23 27 39 29 29 24 27 ...
##  $ URL.LENGTH            : int  20 24 23 31 29 41 37 39 26 35 ...
##  $ FECHA.APARICION       : Date, format: "1996-02-01" "1987-08-01" ...
##  $ ANIOS.DESDE.APARICION : num  24 32 12 10 46 21 32 28 21 22 ...
##  $ MES.APARICION         : Ord.factor w/ 12 levels "enero"<"febrero"<..: 2 8 12 11 11 9 5 8 7 8 ...
##  $ TRIMESTRE.APARICION   : int  1 3 4 4 4 3 2 3 3 3 ...
##  $ DECADA.APARICION      : num  1990 1980 2000 2000 1970 1990 1980 1990 1990 1990 ...
##  $ MEDIA.APARICIONES.ANIO: num  0.75 0.125 1.5 0.1 0.0217 ...
##  $ BRAND                 : Factor w/ 2 levels "DC","MARVEL": 2 2 2 1 2 2 1 1 2 1 ...

Para evitar que las escalas creen un sesgo en el modelo, es conveniente transformar los valores a escala logarítmica

allcomics_ML <- mutate(allcomics_ML,
                       page_id = log10(page_id + 1),
                       ID = log10(ID + 1),
                       ALIGN = log10(ALIGN + 1),
                       EYE = log10(EYE + 1),
                       HAIR = log10(HAIR + 1),
                       SEX = log10(SEX + 1),
                       GSM = log10(GSM + 1),
                       ALIVE = log10(ALIVE + 1),
                       APPEARANCES = log10(APPEARANCES + 1),
                       YEAR = log10(YEAR + 1),
                       NAME.LENGTH = log10(NAME.LENGTH + 1),
                       URL.LENGTH = log10(URL.LENGTH + 1),
                       FECHA.APARICION = log10(FECHA.APARICION + 1),
                       ANIOS.DESDE.APARICION = log10(ANIOS.DESDE.APARICION + 1),
                       MES.APARICION = log10(MES.APARICION + 1),
                       TRIMESTRE.APARICION = log10(TRIMESTRE.APARICION + 1),
                       DECADA.APARICION = log10(DECADA.APARICION + 1),
                       BRAND = log10(BRAND + 1))

Revisamos la estructura del DATASET, para depurar y eliminar aquellas variables incompatibles (tipo character) o aquellas que son redundantes, y las que hemos calculado durante el análisis exploratorio que harían trivial la predicción (Por ejemplo: Media de Apariciones por Año.)

str(allcomics_ML)
## 'data.frame':    22242 obs. of  21 variables:
##  $ page_id               : num  5.8 4.26 5.71 5.17 5.86 ...
##  $ name                  : chr  "Jonath (Earth-616)" "Crazy Legs (Earth-616)" "Vyr'tal (Earth-616)" "Cinderblock (New Earth)" ...
##  $ urlslug               : chr  "\\/Jonath_(Earth-616)" "\\/Crazy_Legs_(Earth-616)" "\\/Vyr%27tal_(Earth-616)" "\\/wiki\\/Cinderblock_(New_Earth)" ...
##  $ ID                    : num  0.602 0.699 0.602 0.699 0.602 ...
##  $ ALIGN                 : num  0.602 0.699 0.477 0.301 0.699 ...
##  $ EYE                   : num  1 1 1.23 1.26 1 ...
##  $ HAIR                  : num  1 0.778 1 1 0.602 ...
##  $ SEX                   : num  0.477 0.477 0.477 0.477 0.477 ...
##  $ GSM                   : num  0.699 0.699 0.699 0.699 0.699 ...
##  $ ALIVE                 : num  0.477 0.477 0.477 0.477 0.477 ...
##  $ APPEARANCES           : num  1.279 0.699 1.279 0.301 0.301 ...
##  $ YEAR                  : num  3.3 3.3 3.3 3.3 3.3 ...
##  $ NAME.LENGTH           : num  1.28 1.36 1.3 1.38 1.45 ...
##  $ URL.LENGTH            : num  1.32 1.4 1.38 1.51 1.48 ...
##  $ FECHA.APARICION       : num  2.83 2.76 2.91 2.92 2.61 ...
##  $ ANIOS.DESDE.APARICION : num  1.4 1.52 1.11 1.04 1.67 ...
##  $ MES.APARICION         : num  0.477 0.954 1.114 1.079 1.079 ...
##  $ TRIMESTRE.APARICION   : num  0.301 0.602 0.699 0.699 0.699 ...
##  $ DECADA.APARICION      : num  3.3 3.3 3.3 3.3 3.29 ...
##  $ MEDIA.APARICIONES.ANIO: num  0.75 0.125 1.5 0.1 0.0217 ...
##  $ BRAND                 : num  0.477 0.477 0.477 0.301 0.477 ...
summary(allcomics_ML)
##     page_id          name             urlslug                ID        
##  Min.   :3.011   Length:22242       Length:22242       Min.   :0.3010  
##  1st Qu.:4.465   Class :character   Class :character   1st Qu.:0.6021  
##  Median :5.270   Mode  :character   Mode  :character   Median :0.6021  
##  Mean   :5.012                                         Mean   :0.6247  
##  3rd Qu.:5.646                                         3rd Qu.:0.6990  
##  Max.   :5.878                                         Max.   :0.8451  
##      ALIGN             EYE              HAIR             SEX        
##  Min.   :0.3010   Min.   :0.3010   Min.   :0.3010   Min.   :0.3010  
##  1st Qu.:0.3010   1st Qu.:0.6990   1st Qu.:0.6021   1st Qu.:0.4771  
##  Median :0.4771   Median :1.0000   Median :0.9542   Median :0.4771  
##  Mean   :0.4509   Mean   :0.8992   Mean   :0.8592   Mean   :0.4333  
##  3rd Qu.:0.6021   3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:0.4771  
##  Max.   :0.7782   Max.   :1.4314   Max.   :1.4771   Max.   :0.4771  
##       GSM             ALIVE         APPEARANCES          YEAR      
##  Min.   :0.3010   Min.   :0.3010   Min.   :0.3010   Min.   :3.287  
##  1st Qu.:0.6990   1st Qu.:0.4771   1st Qu.:0.4771   1st Qu.:3.296  
##  Median :0.6990   Median :0.4771   Median :0.6990   Median :3.299  
##  Mean   :0.6981   Mean   :0.4353   Mean   :0.8301   Mean   :3.298  
##  3rd Qu.:0.6990   3rd Qu.:0.4771   3rd Qu.:1.1761   3rd Qu.:3.301  
##  Max.   :0.9542   Max.   :0.4771   Max.   :3.6068   Max.   :3.304  
##   NAME.LENGTH      URL.LENGTH     FECHA.APARICION ANIOS.DESDE.APARICION
##  Min.   :0.699   Min.   :0.8451   Min.   :0.301   Min.   :0.8451       
##  1st Qu.:1.322   1st Qu.:1.3979   1st Qu.:2.638   1st Qu.:1.2788       
##  Median :1.398   Median :1.4472   Median :2.784   Median :1.4771       
##  Mean   :1.389   Mean   :1.4517   Mean   :2.675   Mean   :1.4583       
##  3rd Qu.:1.447   3rd Qu.:1.5051   3rd Qu.:2.867   3rd Qu.:1.6435       
##  Max.   :1.845   Max.   :1.8573   Max.   :2.944   Max.   :1.9294       
##  MES.APARICION    TRIMESTRE.APARICION DECADA.APARICION MEDIA.APARICIONES.ANIO
##  Min.   :0.3010   Min.   :0.3010      Min.   :3.286    Min.   : 0.0119       
##  1st Qu.:0.6990   1st Qu.:0.4771      1st Qu.:3.295    1st Qu.: 0.0625       
##  Median :0.9031   Median :0.6021      Median :3.299    Median : 0.1739       
##  Mean   :0.8276   Mean   :0.5265      Mean   :3.297    Mean   : 0.5948       
##  3rd Qu.:1.0414   3rd Qu.:0.6990      3rd Qu.:3.301    3rd Qu.: 0.5000       
##  Max.   :1.1139   Max.   :0.6990      Max.   :3.303    Max.   :75.6364       
##      BRAND       
##  Min.   :0.3010  
##  1st Qu.:0.3010  
##  Median :0.4771  
##  Mean   :0.4242  
##  3rd Qu.:0.4771  
##  Max.   :0.4771
#REMOCION DE VARIABLES REDUNDANTES Y DE AQUELLAS QUE NO TIENEN RELEVANCIA EN LA PREDICCION DE LAS APARICIONES
allcomics_ML[ ,c('name','urlslug','MEDIA.APARICIONES.ANIO','ANIOS.DESDE.APARICION','MES.APARICION','DECADA.APARICION','YEAR','GSM','ALIVE')] <- list(NULL)

Dividimos el conjunto de datos en TRAIN y TEST, usando la función SAMPLE y la regla del 80/20.

set.seed(123)   #  set seed to ensure you always have same random numbers generated
sample = sample.split(allcomics_ML,SplitRatio = 0.8) # splits the data in the ratio mentioned in SplitRatio. After splitting marks these rows as logical TRUE and the the remaining are marked as logical FALSE
train =subset(allcomics_ML,sample ==TRUE) # creates a training dataset named train1 with rows which are marked as TRUE
test=subset(allcomics_ML, sample==FALSE)

test$APARICIONES.ORIGINALES <- test$APPEARANCES
test[ ,c('APPEARANCES')] <- list(NULL)

Creamos el modelo de predicción de las apariciones con RF.

set.seed(222)
rf_model <- randomForest(APPEARANCES ~ .,
                         data = train, 
                         ntree = 501,
                         replace = TRUE,
                         nodesize = 9,
                         importance = TRUE); print(rf_model)
## 
## Call:
##  randomForest(formula = APPEARANCES ~ ., data = train, ntree = 501,      replace = TRUE, nodesize = 9, importance = TRUE) 
##                Type of random forest: regression
##                      Number of trees: 501
## No. of variables tried at each split: 3
## 
##           Mean of squared residuals: 0.1222302
##                     % Var explained: 52.78

Conclusión

Se puede predecir la cantidad de apariciones con una precisión ACEPTABLE, ya que el modelo tiene las siguientes medidas de bondad:

Esto se debe a que las variables predictoras muestran bajas correlaciones que no permiten que el modelo sea más preciso a la hora de pronosticar un valor.

Luego, procedemos a revisar las variables que el modelo detecto como importantes para la predicción.

# Create an object for importance of variables
importance <- importance(rf_model) 

# Create data frame using importance. 
varImportance <- data.frame(Variables = row.names(importance), 
                            Importance = round(importance[,'IncNodePurity'], 0))
Imp<-varImp(rf_model,scale= FALSE)
Imp
##                         Overall
## page_id             0.129249859
## ID                  0.012254069
## ALIGN               0.020254966
## EYE                 0.034919318
## HAIR                0.004779189
## SEX                 0.001584426
## NAME.LENGTH         0.018231471
## URL.LENGTH          0.031086665
## FECHA.APARICION     0.038048984
## TRIMESTRE.APARICION 0.002732609
## BRAND               0.032867242
# Create interactive plot.
ggplotly(ggplot(varImportance, aes(x = reorder(Variables, Importance), 
                           y = Importance, fill = Importance)) +
       geom_bar(stat='identity') + 
       labs(title = 'Importancia del predictor', x = 'Predictor', y = 'RMSLE') +
       coord_flip() + 
       theme_light())

Realizamos la predicción en el conjunto de datos de TEST, posterior a ello, almacenamos las predicciones en un dataframe SOLUCION.

prediction <- predict(rf_model, test)

solution <- test

solution$APPEARANCES.PREDICTED<-prediction

Es importante recordar que se debe reversar la escala logarítmica para tener el valor de apariciones predicho final. Luego se guarda en disco dicho archivo.

#se reversa la transformación logarítmica de los ingresos antes de exportar los resultados
solution <- as_tibble(solution) %>%
   mutate(page_id=10^page_id,APPEARANCES.PREDICTED = ceiling(10^APPEARANCES.PREDICTED),APARICIONES.ORIGINALES = 10^APARICIONES.ORIGINALES)

solution<-merge(solution, allcomics[, c("page_id", "name")], by="page_id")

write.csv(solution, file = 'prediccion_cantidad_apariciones.csv', row.names = F)